// 大括号里面的变量名，必须与被导入模块（calculator.js）对外接口的名称相同
import {name} from './calculator.js';
console.log(name); // "简易计算器"

// 当然也重新取一个名字，import命令要使用as关键字，将输入的变量重命名
import {version as ver} from './calculator.js';
console.log('v' + ver); // "1.0.0"

// 也可以一次导入多个
import {addition, subtraction as sub} from './calculator.js';
console.log(addition(3, 5)) // 8
console.log(sub(3, 5)) // -2

import {mul} from './calculator.js';
console.log(mul(3, 5)) // 15
import {division as div} from './calculator.js';
console.log(div(3, 5)) // 0.6

// export default 命令抛出的模块，可以任意指定任意名字
import customName from './calculator.js';
customName();

// 模块的整体加载
import * as calculator from './calculator.js';
console.log(calculator.url) // "//www.baidu.com"
console.log(calculator.mul(6, 2));
// 但默认抛出的模块不存在
// calculator.sayHello(); // 报错

// export 与 import 的复合写法
export {subtraction as sub} from './calculator.js';
// 同下
// import {subtraction} from './calculator.js';
// export {subtraction as sub}
// 同样，默认接口也可以改名为具名接口并再次抛出
export { default as es6 } from './calculator.js';
// 抛出来自calculator.js的所有接口
export * from './calculator.js';

// 模块的继承
// 本js案例本身就是一个模块的继承案例，先抛出所有来自calculator.js的接口，再定义新的接口抛出

// 动态加载
// import xxx from 'xxx'的语法本身只能静态加载对应模块，没法再需要的时候进行动态加载，所以提出了import(xxx)的语法用于动态加载。import()返回一个 Promise 对象
// if (condition) {
//   import('moduleA').then(...);
// } else {
//   import('moduleB').then(...);
// }
import('./calculator.js')
.then(({name, mul}) => {
  console.log(name); // "简易计算器"
  console.log(mul(5, 10)); // 50
});
